/*
 * @Author: new-wang
 * @Date: 2025-06-30 09:21:03
 * @LastEditors: new-wang
 * @LastEditTime: 2025-08-27 15:03:33
 * @FilePath: \nest-demo\src\main.ts
 * @Description: 主文件
 */
import { NestFactory } from '@nestjs/core'
import { AppModule } from './app.module'
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'
import { ConfigService } from '@nestjs/config'
import { ValidationPipe } from '@nestjs/common'
import { HttpExceptionsFilter } from './common/filters/http-exceptions-filter'

async function bootstrap() {
  const app = await NestFactory.create(AppModule) //创建应用实例
  app.enableCors() //启用CORS - 允许跨域请求

  // 读取配置设置
  const config = app.get(ConfigService)
  // api 访问前缀
  const prefix = config.get<string>('app.prefix');
  // 服务端口
  const port =  config.get<number>('app.port') || 3000;

  // 全局使用验证管道
  app.useGlobalPipes(new ValidationPipe({
    transform: true, // 自动类型转换
    whitelist: true, // 去除非 DTO 定义的属性
    // forbidNonWhitelisted: true, // 如果有非 DTO 定义的属性，抛出错误
  }))
  app.useGlobalFilters(new HttpExceptionsFilter()) // 全局使用异常过滤器

  //初始化SwaggerModule类
  const swaggerOptions = new DocumentBuilder()
    .setTitle('接口文档')
    .setDescription('关于bbs接口文档的描述')
    .setVersion('25-1.0')
    // .addTag('bbs')
    .build()
  const documentFactory = SwaggerModule.createDocument(app, swaggerOptions)
  SwaggerModule.setup(`${prefix}/swagger-ui`, app, documentFactory, {
    customSiteTitle: 'Nest-Demo API Docs',
  })

  await app.listen(port) //监听端口，默认3000

  console.log(`Nest-demo 服务启动成功`, '\n', '服务地址', `http://localhost:${port}${prefix}/`, '\n', 'swagger 文档地址', `http://localhost:${port}${prefix}/swagger-ui/`);

}
bootstrap()
